// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const db = uniCloud.database();
const dbDriver = db.collection('driver')
const dbFuel = db.collection('fuel_record')

module.exports = {
	_before: function() { // 通用预处理器

	},
	//获取所有司机信息
	async getDriverList(event) {
		try {
			const result = await dbDriver.get();
			return {
				code: 0,
				data: result.data,
				message: '查询成功'
			};
		} catch (error) {
			// 可根据需要添加更详细的错误日志或处理
			//console.error('数据库查询异常:', error);
			return {
				code: -1,
				message: '查询失败，请检查数据库连接或查询参数'
			};
		}
	},
	//根据id获取司机信息
	async getDriverById(event) {
		if (!event?._id && !event?.userid) {
			return {
				code: -2,
				message: '缺少ID参数'
			};
		}

		try {
			const result = await dbDriver.where(event).get();
			// 假设 result 包含 total 属性，即使数量为0也视为成功查询
			return {
				code: 0,
				data: result.data[0],
				message: '查询成功'
			};
		} catch (error) {
			// 可根据需要添加更详细的错误日志或处理
			//console.error('数据库查询异常:', error);
			return {
				code: -1,
				message: '查询失败，请检查数据库连接或查询参数'
			};
		}
	},

	//获取司机状态
	async getDriverStatus(event) {
		try {
			const result = await dbDriver.where(event).count();
			// 假设 result 包含 total 属性，即使数量为0也视为成功查询
			return {
				code: 0,
				count: result.total,
				message: '查询成功'
			};
		} catch (error) {
			// 可根据需要添加更详细的错误日志或处理
			//console.error('数据库查询异常:', error);
			return {
				code: -1,
				message: '查询失败，请检查数据库连接或查询参数'
			};
		}
	},

	//修改司机状态
	async updateDriverStatusByMobile(event) {
		try {
			const updateResult = await dbDriver
				.where({
					mobile: event.mobile
				}).update({
					status: event.status
				})

			// 检查实际更新结果
			if (updateResult.updated === 0) { // 根据实际驱动返回值调整字段
				return {
					code: 1,
					message: '数据未发生变化，无实际更新'
				};
			}

			return {
				code: 0,
				message: '更新成功',
				updatedId: updateResult, // 返回明确更新的ID
				affected: updateResult.updated // 返回影响行数
			};
		} catch (error) {
			//console.error('状态更新失败:', error.message);

			// 细化错误类型
			const errorCode = error.code || -1; // 使用数据库错误代码
			const errorMessage = error.message.includes('NotFound') ?
				'指定ID的记录不存在' :
				'数据库更新异常';

			return {
				code: errorCode,
				message: `更新失败：${errorMessage}`,
				detail: process.env.NODE_ENV === 'development' ?
					error.stack : undefined // 开发环境返回详细错误
			};
		}
	},

	async updateDriverStatus(event) {
		try {
			// 参数基础校验
			if (!event?._id) {
				return {
					code: -2,
					message: '缺少文档ID参数'
				};
			}
			if (!event?.data || typeof event.data !== 'object') {
				return {
					code: -3,
					message: '无效的更新数据格式'
				};
			}

			// 执行更新操作
			const updateResult = await dbDriver
				.doc(event._id)
				.update(event.data);

			// 检查实际更新结果
			if (updateResult.updated === 0) { // 根据实际驱动返回值调整字段
				return {
					code: 1,
					message: '数据未发生变化，无实际更新'
				};
			}

			return {
				code: 0,
				message: '更新成功',
				updatedId: event._id, // 返回明确更新的ID
				affected: updateResult.updated // 返回影响行数
			};
		} catch (error) {
			//console.error('状态更新失败:', error.message);

			// 细化错误类型
			const errorCode = error.code || -1; // 使用数据库错误代码
			const errorMessage = error.message.includes('NotFound') ?
				'指定ID的记录不存在' :
				'数据库更新异常';

			return {
				code: errorCode,
				message: `更新失败：${errorMessage}`,
				detail: process.env.NODE_ENV === 'development' ?
					error.stack : undefined // 开发环境返回详细错误
			};
		}
	},
	//更新司机信息
	async updateDriverInfo(event) {
		try {
			// 参数基础校验
			if (!event?._id) {
				return {
					code: -2,
					message: '缺少文档ID参数'
				};
			}
			if (!event?.data || typeof event.data !== 'object') {
				return {
					code: -3,
					message: '无效的更新数据格式'
				};
			}

			// 执行更新操作
			const updateResult = await dbDriver
				.doc(event._id)
				.update(event.data);

			// 检查实际更新结果
			if (updateResult.updated === 0) { // 根据实际驱动返回值调整字段
				return {
					code: 1,
					message: '数据未发生变化，无实际更新'
				};
			}

			return {
				code: 0,
				message: '更新成功',
				updatedId: event._id, // 返回明确更新的ID
				affected: updateResult.updated // 返回影响行数
			};
		} catch (error) {
			//console.error('状态更新失败:', error.message);

			// 细化错误类型
			const errorCode = error.code || -1; // 使用数据库错误代码
			const errorMessage = error.message.includes('NotFound') ?
				'指定ID的记录不存在' :
				'数据库更新异常';

			return {
				code: errorCode,
				message: `更新失败：${errorMessage}`,
				detail: process.env.NODE_ENV === 'development' ?
					error.stack : undefined // 开发环境返回详细错误
			};
		}
	},

	//加油记录
	async addFuelRecord(event) {
		try {
			const res = dbFuel.add(event)
			return {
				code: 0,
				message: '添加成功'
			}
		} catch (error) {
			return {
				code: -1,
				message: error.message
			}
		}
	},

	//获取加油记录(已修改为分页查询)
	async getFuelRecordAll(page = 1, pageSize = 10, keyword = '') {
		try {
			// 计算需要跳过的记录数
			const skip = (page - 1) * pageSize;

			// 构建查询条件
			let query = dbFuel;

			// 如果有搜索关键词，添加姓名模糊查询
			if (keyword && keyword.trim()) {
				query = query.where({
					'driverinfo.name': new RegExp(keyword, 'i') // 不区分大小写的模糊匹配
				});
			}

			// 执行分页查询
			const res = await query
				.orderBy('create_date', 'desc') // 按创建时间倒序
				.skip(skip)
				.limit(pageSize)
				.get();

			return {
				code: 0,
				data: res.data,
				message: '查询成功'
			}
		} catch (error) {
			return {
				code: -1,
				message: error.message
			}
		}
	},
	//根据_id获取加油记录
	async getFuelRecordById(event) {
		try {
			const res = await dbFuel.doc(event._id).get()
			return {
				code: 0,
				data: res.data,
				message: '查询成功'
			}
		} catch (error) {
			return {
				code: -1,
				message: error.message
			}
		}
	},
	//根据姓名获取加油记录
	// 获取加油记录（支持分页和日期筛选）
	async getFuelRecordByName(event) {
		try {
			const {
				name,
				page = 1,
				pageSize = 10,
				startDate,
				endDate
			} = event;
			const dbCmd = db.command;
			let query = dbFuel.where({
				'driverinfo.name': name
			});
			// 添加日期筛选条件
			if (startDate && endDate) {
				query = query.where({
					fuelDate: dbCmd.gte(startDate).lte(endDate)
				});
			}
			// 获取总数
			const countRes = await query.count();

			// 获取分页数据
			const dataRes = await query
				.orderBy('create_date', 'desc')
				.skip((page - 1) * pageSize)
				.limit(pageSize)
				.get();
			return {
				code: 0,
				data: dataRes.data,
				total: countRes.total,
				message: '查询成功'
			};
		} catch (error) {
			return {
				code: -1,
				message: error.message
			};
		}
	},

	//修改加油记录
	async updateFuelRecord(event) {
		try {
			// 参数基础校验
			if (!event?._id) {
				return {
					code: -2,
					message: '缺少文档ID参数'
				};
			}
			if (!event?.data || typeof event.data !== 'object') {
				return {
					code: -3,
					message: '无效的更新数据格式'
				};
			}

			// 执行更新操作
			const updateResult = await dbFuel
				.doc(event._id)
				.update(event.data);

			// 检查实际更新结果
			if (updateResult.updated === 0) { // 根据实际驱动返回值调整字段
				return {
					code: 1,
					message: '数据未发生变化，无实际更新'
				};
			}

			return {
				code: 0,
				message: '更新成功',
				updatedId: event._id, // 返回明确更新的ID
				affected: updateResult.updated // 返回影响行数
			};
		} catch (error) {
			//console.error('状态更新失败:', error.message);

			// 细化错误类型
			const errorCode = error.code || -1; // 使用数据库错误代码
			const errorMessage = error.message.includes('NotFound') ?
				'指定ID的记录不存在' :
				'数据库更新异常';

			return {
				code: errorCode,
				message: `更新失败：${errorMessage}`,
				detail: process.env.NODE_ENV === 'development' ?
					error.stack : undefined // 开发环境返回详细错误
			};
		}
	}
	/**
	 * method1方法描述
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	/* 
	method1(param1) {
		// 参数校验，如无参数则不需要
		if (!param1) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '参数不能为空'
			}
		}
		// 业务逻辑
		
		// 返回结果
		return {
			param1 //请根据实际需要返回值
		}
	}
	*/
}